﻿#ifndef GY_GRAPHICSWIDETEXTITEM_H
#define GY_GRAPHICSWIDETEXTITEM_H
#include "GY_BasicsGraphicsObject.h"
#include "GY_ControlLibrary_global.h"
#include <QFont>
/**
 * @brief The GY_GraphicsWideTextItem class
 * 文字图形类
 */
class GY_CONTROLLIBRARY_EXPORT GY_GraphicsWideTextItem : public GY_BasicsGraphicsObject
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_GraphicsWideTextItem(const QString &guid, QGraphicsItem *parent = nullptr);
    explicit Q_INVOKABLE GY_GraphicsWideTextItem(const QString &guid, qreal x, qreal y, QGraphicsItem *parent = nullptr);  
    /**
     * @brief updataPen 更新笔
     */
    virtual void updataPen();
    /**
     * @brief updataBrush 更新画刷
     */
    virtual void updataBrush();

private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief UpdateDraw 更新绘制
     */
    void updateDraw();
    /**
     * @brief updateCirlePoint  更新中心点
     * @param name 属性名称
     * @param value 中心点位置
     * @return 是否更新成功
     */
    bool updateCirlePoint(const QString &name, const QVariant &value);
    /**
     * @brief updateDataString 更新文本数据
     * @param name 属性名称
     * @param value 文本数据
     * @return 是否更新成功
     */
    bool updateDataString(const QString &name, const QVariant &value);
    /**
     * @brief updateDataStringCapacity 更新文本长度
     * @param name 属性名称
     * @param value 文本长度
     * @return 是否更新成功
     */
    bool updateDataStringCapacity(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint 更新点位
     * @param name 属性名称
     * @param value 坐标点
     * @return 是否更新成功
     */
    bool updatePoint(const QString &name, const QVariant &value);
    /**
     * @brief updateSize 更新相对中心点位
     * @param name 属性名称
     * @param value 坐标点
     * @return 是否更新成功
     */
    bool updateSize(const QString &name, const QVariant &value);
    /**
     * @brief updateIsBold 更新是否加粗
     * @param name 属性名称
     * @param value 布尔值
     * @return 是否更新成功
     */
    bool updateIsBold(const QString &name, const QVariant &value);
    /**
     * @brief updateIsItalic 更新是否倾斜
     * @param name 属性名称
     * @param value 布尔值
     * @return 是否更新成功
     */
    bool updateIsItalic(const QString &name, const QVariant &value);
    /**
     * @brief updatePointSize 更新字体大小
     * @param name 属性名称
     * @param value 字体大小
     * @return 是否更新成功
     */
    bool updatePointSize(const QString &name, const QVariant &value);
    /**
     * @brief updateThickness 更新厚度
     * @param name 属性名称
     * @param value 厚度
     * @return 是否更新成功
     */
    bool updateThickness(const QString &name, const QVariant &value);
    /**
     * @brief updateAlignment 更新对齐方式
     * @param name 属性名称
     * @param value 对齐方式
     * @return 是否更新成功
     */
    bool updateAlignment(const QString &name, const QVariant &value);
    /**
     * @brief updateIsStrikethrough 更新删除线
     * @param name 属性名称
     * @param value 删除线
     * @return 是否更新成功
     */
    bool updateIsStrikethrough(const QString &name, const QVariant &value);
    /**
     * @brief updateIsUnderlined 更新下划线
     * @param name 属性名称
     * @param value 下划线
     * @return 是否更新成功
     */
    bool updateIsUnderlined(const QString &name, const QVariant &value);
    /**
     * @brief updateFontId 更新字体
     * @param name 属性名称
     * @param value 字体
     * @return 是否更新成功
     */
    bool updateFontId(const QString &name, const QVariant &value);
    /**
     * @brief precalculatedPosition 计算点位置
     * @return 计算得到的点位置
     */
    QPointF precalculatedPosition();


private:
    //字体属性
    QFont m_Font;
};



#endif // GY_GRAPHICSWIDETEXTITEM_H
